<?php
/**
 * Klasa statyczna określająca możliwe typy przy przygotowywaniu zmiennych(prepare).
 * @author Mateusz Łędzewicz
 * @author Patryk Powiłan
 */
class DataType{
	const int = 'Int';
	const float = 'Float';
	const unsignedInt = 'UnsignedInt';
	const alfa = 'Alfa';
	const alfaNum = 'AlfaNum';
}

/**
 * Klasa bazowa obsługująca komunikacje modułu głównego z przeglądarką.
 * @author Mateusz Łędzewicz
 * @author Patryk Powiłan
 */
class Data{
	protected $data;
	protected $errors = array();
	protected $prepareData=array();
	
	public function __construct($array){
		$this-> data = $array;
	}
	
	/**
	 * Przygotowanie danych pobranych z przeglądarki do użycia. 
	 * Umożliwienie pobrania wartości. 
	 * Wstępna walidacja.
	 * W przypadku niepowodzenia walidacji przypisuje wartość null
	 * @param unknown $field nazwa pola
	 * @param DataType $type typ walidacji
	 */
	public function prepare($field, $type='everything'){
		if(!array_key_exists($field, $this->prepareData) && array_key_exists($field, $this->data)){
			//TODO dodaj walidacje
			$reflector = new ReflectionClass('DataType');
			$prepare = true;
			if(in_array($type, $reflector->getConstants())){
				$operation = 'check'.$type; 
				$prepare = Validator::$operation($this->data[$field]);
			}
			if($prepare)
				$this->prepareData[$field] = $this->data[$field];
			else
				$this->prepareData[$field] = null;	
			return $this->prepareData[$field];
		}
		return null;
	}
	
	
	/**
	 * Pobranie wcześniej przygotowanego pola
	 * @param unknown $fieldnazwa pola
	 * @return multitype:|NULL
	 */
	public function get($field){
		if(array_key_exists($field, $this -> prepareData))
			return $this->prepareData[$field];
		return null;
	}
	
	/**
	 * Do omówienia
	 */
	public function checkValidation(){
		//TODO nie wiem czy nie do usunięcia
	}
	/**
	 * Do omówienia
	 */
	public function getErrors(){
		return $errors;
	}
	/**
	 * Przypisywanie wartości polu
	 * @param unknown $field pole do przypisania
	 * @param unknown $value wartość do przypisania
	 */
	public function set($field, $value){
		$this->prepareData[$field] = $value;
	}
	
	
	
}
?>